#ifndef __LOG_WRITER_H__
#define __LOG_WRITER_H__

#include <memory>
#include <mutex>


/**
 * Classe d'outils permettant de gerer l'ecriture de messages de log.
 */
class LogWriter
{
public:
	
	LogWriter(std::ostream& output, const std::string& header=std::string());

	/**
	* Ecrire un message d'information.
	* 
	* @param msg Message a ecrire.
	*/
	void write_info(const std::string& msg) const;
	/**
	* Ecrire un message d'alerte.
	* 
	* @param msg Message a ecrire.
	*/
	void write_warning(const std::string& msg) const;
	/**
	* Ecrire un message d'erreur.
	* 
	* @param msg Message a ecrire.
	*/
	void write_error(const std::string& msg) const;

private:

	/** Mutex assurant le verrouillage de cet ecriveur lors de l'ecriture d'un message,
	 * pour eviter plusieurs ecritures simultanees. */
	std::unique_ptr<std::mutex> m_writeMutex;
	/** Flux de sortie dans lequel ecrire. */
	std::ostream& m_output;
	/** En-tete a afficher devant tout message. */
	std::string m_header;

	/**
	* Ecrire un message avec un prefix particulier.
	* 
	* @param prefix Prefix.
	* @param msg Message a ecrire.
	*/
	void write(const std::string& prefix, const std::string& msg) const;
};


#endif // __LOG_WRITER_H__
